package com.syedu.day11;

/**
 * description：Java包装类
 * 它是Java八种基本类型的升级,从基本类型提升到对象类型
 *
 * byte,short,long,boolean,double,float ==> 首字母大写
 * int ==> Integer
 * char ==> Character
 *
 * 特点: 对象类型,所以默认值可以设置为null,而且自带一些功能方法可以调用,基本类型无法直接调用方法
 * 用法: 实体类定义属性时,属性的类型都可以定义成包装类
 *
 * @author Administrator
 * @date 2022/3/24 13:54
 */
public class IntegerDemo {
    public static void main(String[] args) {
        //创建包装类
        //方式一: 通过构造方法创建包装类对象(JDK9已过时,不推荐使用)
        //Integer i1 = new Integer(3);
        //注意: 如果传入非数字字符串,则抛出异常:java.lang.NumberFormatException
        //Integer i2 = new Integer("3");
        //System.out.println(i1);
        //System.out.println(i2);
        //System.out.println(i1 == i2);//false
        //System.out.println(i1.equals(i2));//true

        System.out.println("---------------------------------------------");

        /**
         *  方式二: 自动封箱 -- 自动把基本类型转换成包装类
         *
         *  自动封箱的底层原理:
         *  本质上是调用了Integer中的一个方法valueOf();该方法定义了创建Integer对象的不同分支
         *  如果数值在-128~127之间,则采用整型缓冲来获取新对象(类似于串池),保证对象是相同的,
         *  如果数值超过这个范围,则采用new的方式来创建新对象,则内存地址是不同的!
         */
        //Integer i3 = 3;
        Integer i3 = Integer.valueOf(3);
        Integer i4 = 3;
        System.out.println(i3);
        System.out.println(i4);
        //System.out.println(i3 == i4);
        System.out.println(i3.equals(i4));

        System.out.println("---------------------------------------------");

        //常用属性
        int maxValue = Integer.MAX_VALUE;
        int minValue = Integer.MIN_VALUE;
        System.out.println(maxValue);
        System.out.println(minValue);

        //常用方法
        //1.比较方法,返回-1,0,1
        int compareTo = i3.compareTo(i4);
        System.out.println(compareTo);

        //比较方法,返回-1,0,1
        int compare = Integer.compare(i3, i4);
        System.out.println(compare);

        //返回boolean类型
        boolean equals = i3.equals(i4);
        System.out.println(equals);

        //2.把字符串转换成数字,字符串必须是数字的,否则转换失败
        //注意:以下方法的真正返回类型,但是因为int和Integer之间存在自动解封箱概念,所以,可以互通
        Integer decode = Integer.decode("123");
        System.out.println(decode);

        Integer valueOf = Integer.valueOf("123");
        System.out.println(valueOf);

        int parseInt = Integer.parseInt("111");
        System.out.println(parseInt);

        //把数字转换成字符串类型
        String str = String.valueOf(123);
        System.out.println(str);

        //技巧: 数字加上空字符串会转换成字符串类型
        System.out.println("" + 3);
        System.out.println("计算结果为:" + 3 + 4);
        System.out.println("计算结果为:" + (3 + 4));

        //3.进制转换方法
        String toBinaryString = Integer.toBinaryString(7);
        String toOctalString = Integer.toOctalString(8);
        String toHexString = Integer.toHexString(16);
        System.out.println(toBinaryString);
        System.out.println(toOctalString);
        System.out.println(toHexString);
    }
}